package com.gitee.wsl.android.notification

//package com.ivy.notifications

import android.content.Context
import androidx.core.app.NotificationCompat
import com.gitee.wsl.ext.base.isFalse

class IvyNotification(
    val context: Context,
    val id:Int,
    val ivyChannel: IvyNotificationChannel
) : NotificationCompat.Builder(context, ivyChannel.channelId){

    var lightPattern: LightPattern? = null
        set(value) {
            field = value
            if(value!=null){
                setLights(value.argb, value.durationMS, value.startOffMS)
            }else{
                setLights(0, 0, 0)
            }
        }
    var vibratePattern: VibratePattern? = null
        set(value) {
            field = value
            if(value!=null){
                value.isEmpty.isFalse { setVibrate(value.vibrates) }
            }else{
                setVibrate(null)
            }
        }
}

/**
 * detail: 设置通知栏 Led 灯参数实体类
 * @author Ttt
 * <pre>
 * 手机处于锁屏状态时, LED 灯就会不停地闪烁, 提醒用户去查看手机, 下面是绿色的灯光一闪一闪的效果
</pre> *
 */
class LightPattern private constructor(
    // 控制 LED 灯的颜色, 一般有红绿蓝三种颜色可选
    val argb: Int,
    // 指定 LED 灯暗去的时长, 以毫秒为单位
    val startOffMS: Int,
    // 指定 LED 灯亮起的时长, 以毫秒为单位
    val durationMS: Int
) {
    companion object {
        /**
         * 获取 Led 配置参数
         * @param argb       颜色值
         * @param startOffMS 开始时间
         * @param durationMS 持续时间
         * @return [LightPattern]
         */
        operator fun get(
            argb: Int,
            startOffMS: Int,
            durationMS: Int
        ): LightPattern {
            return LightPattern(argb, startOffMS, durationMS)
        }
    }
}

/**
 * detail: 设置通知栏震动参数实体类
 * @author Ttt
 * <pre>
 * vibrate 属性是一个长整型的数组, 用于设置手机静止和震动的时长, 以毫秒为单位
 * 参数中下标为 0 的值表示手机静止的时长, 下标为 1 的值表示手机震动的时长, 下标为 2 的值又表示手机静止的时长, 以此类推
</pre> *
 */
class VibratePattern private constructor(val vibrates: LongArray) {
    // long[] vibrates = { 0, 1000, 1000, 1000 };

    /**
     * 判断是否为 null
     * @return `true` yes, `false` no
     */
    val isEmpty: Boolean
        get() = vibrates.isEmpty()

    companion object {
        /**
         * 获取 震动时间 配置参数
         * @param times 震动时间数组
         * @return [VibratePattern]
         */
        operator fun get(vararg times: Long): VibratePattern {
            return VibratePattern(times)
        }
    }
}
